f3658824a92ae6d5ab71b76ab6b26f07682ae83a,src/main/java/com/continuuity/internal/io/AbstractSchemaGenerator.java,AbstractSchemaGenerator,doGenerate,#TypeToken#Set#,79

Before Change


      TypeToken<?> keyType = typeToken.resolveType(typeArgs[0]);
      TypeToken<?> valueType = typeToken.resolveType(typeArgs[1]);

      return Schema.mapOf(doGenerate(keyType, knownRecords), doGenerate(valueType, knownRecords));
    }

    // Any Java class, class name as the record name.

After Change


    // Java array, use ARRAY schema.
    if(rawType.isArray()) {
      Schema componentSchema = doGenerate(TypeToken.of(rawType.getComponentType()), knownRecords);
      return Schema.arrayOf(Schema.unionOf(componentSchema, Schema.of(Schema.Type.NULL)));
    }

    if(!( type instanceof Class || type instanceof ParameterizedType )) {
      throw new UnsupportedTypeException(
                                          "Type " + type + " is not supported. " +
                                            "Only Class or ParameterizedType are supported."
      );
    }

    // Any parameterized Collection class would be represented by ARRAY schema.
    if(Collection.class.isAssignableFrom(rawType)) {
      if(!( type instanceof ParameterizedType )) {
        throw new UnsupportedTypeException("Only supports parameterized Collection type.");
      }
      TypeToken<?> componentType = typeToken.resolveType(( (ParameterizedType) type ).getActualTypeArguments()[0]);
      Schema componentSchema = doGenerate(componentType, knownRecords);
      return Schema.arrayOf(Schema.unionOf(componentSchema, Schema.of(Schema.Type.NULL)));
    }

    // Java Map, use MAP schema.
    if(Map.class.isAssignableFrom(rawType)) {
      if(!( type instanceof ParameterizedType )) {
        throw new UnsupportedTypeException("Only supports parameterized Map type.");
      }
      Type[] typeArgs = ( (ParameterizedType) type ).getActualTypeArguments();
      TypeToken<?> keyType = typeToken.resolveType(typeArgs[0]);
      TypeToken<?> valueType = typeToken.resolveType(typeArgs[1]);

      Schema valueSchema = doGenerate(valueType, knownRecords);

      return Schema.mapOf(doGenerate(keyType, knownRecords), Schema.unionOf(valueSchema, Schema.of(Schema.Type.NULL)));
    }

    // Any Java class, class name as the record name.